// Loesung_von_Aufgabe_8.4_3_Maxwellscher_Daemon

// Die Arrays von Datentyp Teilchen mit dem Namen teilchen... werden initialisiert
Teilchen[] teilchenRot = new Teilchen[150]; // Das Array kann 150 rote Teilchen aufnehmen 
Teilchen[] teilchenBlau = new Teilchen[150]; // Das Array kann 150 blaue Teilchen aufnehmen 


void setup()
{
  size(400, 400);

  for (int i = 0; i < 150; i++) 
  {
    // Nun werden die konkreten x- und y-Werte für xTemp, vTemp, dTemp, und cTemp (color) für jedes Teilchen festgelegt
    teilchenRot[i] = new Teilchen(new PVector(random(10, 390), random(10, 390)), new PVector(random(-0.5, 0.5), random(-0.5, 0.5)), 10, new PVector(255, 0, 0));
    teilchenBlau[i] = new Teilchen(new PVector(random(10, 390), random(10, 390)), new PVector(random(-0.5, 0.5), random(-0.5, 0.5)), 10, new PVector(0, 0, 255));
  }
}

void draw()
{
  background(255);
  strokeWeight(8);
  stroke(255, 0, 255);
  line(width/2, 0, width/2, height); // Trennwand
  noFill();
  stroke(0, 200, 0);
  rect(0, 0, 400, 400); 

  // Nun werden alle Teilchen mit den zugehörigen Funktionen versehen
  for (int i = 0; i < 150; i++)
  {
    teilchenRot[i].move(10);
    teilchenRot[i].wand();

    teilchenBlau[i].move(1);
    teilchenBlau[i].wand();
  }

  // Diese Funktion wird immer ausgeführt
  for (int i = 0; i < 150; i++)
  {
    teilchenRot[i].zeichnen();
    teilchenBlau[i].zeichnen();
  }

  // Der Maxwellsche Dämon wird gezeichnet
  stroke(255, 0, 0);
  strokeWeight(3);
  fill(0);
  ellipse(200, 35, 50, 50);
  stroke(255, 0, 0);
  strokeWeight(10);
  point(190, 30);
  point(210, 30);
  stroke(255, 0, 0);
  strokeWeight(3);
  noFill();
  arc(200, 35, 30, 30, 0.5, 0.8*PI);
}